<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/**
 * @file answer_page.test.php
 * @brief файл содержит код для тестирования класса AnswerPage \n
 * @include answer_page.test.php
 */

/*! @addtogroup TestWebFormsQA Tестирование проекта WebFormsQA
 *  Группа включает классы для тестирования исходного кода
 *  @{
 */

/**
 * @class AnswerPageTest
 * @brief Класс для проверки методов страницы ответа на вопросы AnswerPage \n
 *        Исходный код [ @ref answer_page.test.php ]
 */
class AnswerPageTest extends PHPUnit_TestCase {

    /**
     * Метод проверяет состояния страницы ответа на вопросы
     */
    function testUpdate()
    {
        require_once('smarty/smarty.class.php');
        $smarty         = new Smarty;
        $attr           = array(
            'first'          => 'string',       // имя пользователя
            'second'         => 'string'        // пароль пользователя
        );
        // путь к текущему активному шаблону
        $path_template  = "./templates/first/";
        $main_page= new MainPage($smarty, $attr, $path_template, "");

        DataAddTest::DeleteTestDataInDatabase();
        DataAddTest::AddTestDataInDatabase();

        // тестовый пользователя с административными правами
        $base   = &$GLOBALS["base"];        
        $login  = "testUser1";
        $pass   = "testUser1";
        $email  = "test@mail.ru";
        $admin  = true;
        $data   = compact("login", "pass", "email", "admin");
        $id     = "";
        $this->assertFalse( $base->addUser($data, $id) );
        $this->assertEquals(1, $id);
        
        
        //    Состояния страницы:
        //   1)  Авторизация не прошла (стр. EntrancePage),  или пользователь не зарегистрирован или у него нет административного доступа
        //   3)  Авторизация пройдена
        //   4)  Изменен диапазон навигатора.
        //   5)  Вопрос задан в неправильной категории по мнению администратора,
        //       перенос вопроса в другую категорию.
        //   6)  Администратор выбирает вопрос, на который он хочет ответить
        //   7)  Нет ни одного нового вопроса
        //   8)  Вопрос или вопросы были удалены
        //   9)  Добавлен ответ на вопрос
        //  10)  Пользователю направлено письмо, в случае наличия email адреса


        // код переключения на нашу тестируемую страницу
        $_GET['answer_page'] = '';
        

        //   1)  Авторизация не прошла (стр. EntrancePage),  или пользователь не зарегистрирован или у него нет административного доступа
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(1, $state);

        
        //   7)  Авторизация пройдена но нет ни одного нового вопроса
        AuthCommon::addAuthSessionInfo($id, $login, $admin, $email);
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(7, $state);

        
        // добавляю вопрос
        $id_category            = 4;
        $question               = "Кто такие Колобок и два жирафа";
        $email                  = "alex@rambler.ru";
        $base                   = &$GLOBALS["base"];
        $this->assertTrue($base->addQuestion($id_category, $question, $email, $id));
        
        //   3)  Авторизация пройдена
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);
        
        
        //$answer         = "Животные";
        //$this->assertTrue($base->addAnswer($id, $answer));

        //   5)  Вопрос задан в неправильной категории по мнению администратора,
        //       перенос вопроса в другую категорию.
        $question2      = "Кто такие Колобок и два жирафа2";
        $flag = $base->addQuestion($id_category, $question2, $email, $id2);

        $_GET['change']         = '';
        $_SERVER['QUERY_STRING']= "ch=$id&ch=$id2";
        $id_new_category        = 1;
        $_GET['categoryID']     = $id_new_category;

        // состояние передается от главного шаблона к рабочему
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(5, $state);
        unset($_GET['change']);

        //   6)  Администратор выбирает вопрос, на который он хочет ответить
        $_GET['categoryID']     = $id_category;
        $_GET['questionID']     = "$id2";

        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(6, $state);
        unset($_GET['questionID']);


        DataAddTest::DeleteTestDataInDatabase();

        //   7)  Нет ни одного нового вопроса
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(7, $state);
        unset($_GET['change']);


        //   8)  Вопрос или вопросы были удалены
        DataAddTest::AddTestDataInDatabase();
        $_GET['delete'] = '';

        $id_category    = 4;
        $question       = "Кто такие Колобок и два жирафа";
        $email          = "";

        $flag = $base->addQuestion($id_category, $question, $email, $id);

        $question2      = "Кто такие Колобок и два жирафа2";
        $flag = $base->addQuestion($id_category, $question2, $email, $id2);

        $_SERVER['QUERY_STRING'] = "ch=$id&ch=$id2";

        // вопрос удален
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(8, $state);
        unset($_GET['delete']);

        //   9)  Добавлен ответ на вопрос
        $flag = $base->addQuestion($id_category, $question, $email, $id);
        $_GET['questionID'] = "$id";
        $_GET['but_answer'] = '';
        $_GET['answer']     = 'Герои детской передачи';

        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(9, $state);

        //  10)  Пользователю направлено письмо, в случае наличия email адреса
        $email          = "alex@rambler.ru";
        $question       = "Кто такие Колобок и два жирафа3";

        $flag = $base->addQuestion($id_category, $question, $email, $id);

        $_GET['questionID'] = "$id";
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(10, $state);

        unset($_GET['admin_question']);
        unset($_GET['categoryID']);
        unset($_GET['questionID']);
        unset($_GET['but_answer']);
        unset($_GET['answer']);
        unset( $_SESSION['categoryID'] );

    } // testUpdate


} // AnswerPageTest

/*! @} */

?>
